import socket


class WebServer(object):
    # 3、定义一个__init__()魔术方法
    def __init__(self):
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置端口复用（让服务器端占用的端口在执行结束可以立即释放，不影响后续程序的使用）
        self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        self.tcp_server_socket.bind(('', 8000))
        self.tcp_server_socket.listen(128)

    # 5、定义一个handle_request()方法，用于接收消息与发送消息
    def handle_request(self, newsocket,ipport):
        # 接收某个客户端发送过来的消息
        content = newsocket.recv(1024).decode('gbk')
        print(f'{ipport}客户端发送消息：{content}')
        # 返回数据给客户端
        newsocket.send('信息已收到,over!'.encode('gbk'))
        # 关闭套接字对象
        newsocket.close()

    # 4、定义一个start()方法
    def start(self):
        while True:
            new_socket, ip_port = self.tcp_server_socket.accept()
            # 调用自身的handle_request()方法，用于接收消息与发送消息
            self.handle_request(new_socket,ip_port)


# 定义一个程序的执行入口
if __name__ == '__main__':
    # 1、实例化对象
    ws = WebServer()
    # 2、调用对象中的相关方法 => 启动TCP服务
    ws.start()